/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.asportoonline.tags;

import java.io.IOException;
import java.sql.Time;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import org.asportoonline.entities.Prodotto;

/**
 *
 * @author fe
 */
public class RiassuntoPrenotazioneTag extends SimpleTagSupport {
    private List<Prodotto> lista_prodotti;
    private List<String> numero_prodotti;

    public List<Prodotto> getLista_prodotti() {
        return lista_prodotti;
    }

    public void setLista_prodotti(List<Prodotto> lista_prodotti) {
        this.lista_prodotti = lista_prodotti;
    }

    public List<String> getNumero_prodotti() {
        return numero_prodotti;
    }

    public void setNumero_prodotti(List<String> numero_prodotti) {
        this.numero_prodotti = numero_prodotti;
    }
    
    @Override
    public void doTag() throws JspException {
        JspWriter out = getJspContext().getOut();
        
        List<Prodotto> lprod = getLista_prodotti();
        List<String> lnum = getNumero_prodotti();
        Prodotto p;
        int n;
        double importo=0;
        
        try {

            if(lprod==null || lnum==null) {
                out.print("<p>Errore nel recupero dei prodotti prenotati!!!</p>");
            }
            else {
                out.print("<form class=\"bigform\" method=\"post\" action=\"MainController?q=register_prenotation_action\">\n"
                        + "    <input type=\"hidden\" name=\"numero_prodotti\" value=\""+lprod.size()+"\">\n"
                        + "    <fieldset style=\"background-color:#ffffff\">\n"
                        + "        <h3 style=\"text-align:center; line-height:2em;\">La tua attuale prenotazione</h3>"
                        //+ "        <legend><em>La tua attuale prenotazione</em></legend>\n"
                        + "        <br />\n"
                        + "        <table class=\"tabellaPrenotazione\">\n"
                        + "            <tr class=\"odd\"><th>Categoria</th><th>Prodotto</th><th>Prezzo</th><th>Quantit&agrave;</th></tr>\n");
                
                for(int i=0; i<lprod.size(); i++) {
                    p = lprod.get(i);
                    n = Integer.parseInt(lnum.get(i));
                    importo += n*p.getPrezzo();
                    
                    out.print(i%2==0 ? "            <tr class=\"even\">" : "            <tr class=\"odd\">");
                    out.print("<td>" + p.getCategoria().getNome() + "</td>"
                            + "<td>" + p.getNome() + "</td>"
                            + "<td>" + p.getPrezzo() + " &euro;</td>"
                            + "<td>" + n
                            + "<input type=\"hidden\" name=\"id_prodotto_"+i+"\" value=\""+p.getIdProdotto()+"\" />"
                            + "<input type=\"hidden\" name=\"num_prodotto_"+i+"\" value=\""+n+"\" /></td></tr>\n");
                }
                
                out.print("        </table>\n"
                        + "        <br />\n"
                        + "        <p style=\"text-align:right; font-weight:bold;\">TOTALE: "+importo+" &euro;</p>\n"
                        + "    </fieldset>\n");
                
                /* creo la select dell'orario in base all'orario di apertura del locale */
                String options = crea_select_orario(lprod.get(0));
                //////////////////////////////////////////////////////////////
                
                out.print("    <fieldset>"
                        + "        <legend><em>Dettagli consegna</em></legend>\n"
                        + "        <label>Orario di consegna<br /><select style=\"margin-left:20px;\" name=\"orario_consegna\">"+options+"</select></label><br />\n"
                        + "        <label>Giorno di consegna<br /><input name=\"data_consegna\" value=\"GG/MM/AAAA\"/></label><br />\n"
                        + "        <label>Descrizione<br /><input name=\"descrizione\" /></label><br /><br />\n"
                        + "        <input type=\"submit\" id=\"pulsante_conferma\" value=\"CONFERMA\" />\n"
                        + "    </fieldset>\n"
                        + "</form>");
            }
        } catch(IOException ex) {
            throw new JspException("Errore in RiassuntoPrenotazioneTag tag.");
        }
    }
    
    private String crea_select_orario(Prodotto p) {
        String options = "<option value=\"none\">Scegli orario...</option>";

        String[] app = p.getLocale().getPrimaApertura().split("-");
        String apertura1 = app[0].trim();
        String chiusura1 = app[1].trim();
        String ora1 = "";
        String ora2 = "";
        long tap1 = Time.valueOf(apertura1+":00").getTime();
        long tch1 = Time.valueOf(chiusura1+":00").getTime();

        if(tap1 < tch1) {       //orario non a cavallo della mezzanotte
            for(int i=0, flag=0; i<24; i++) {
                if(i<10) {
                    ora1 = "0"+i+":00";
                    ora2 = "0"+i+":30";                            
                }
                else {
                    ora1 = i+":00";
                    ora2 = i+":30";                                                       
                }

                if(apertura1.equals(ora1)) {
                    options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                    options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                    flag = 1;
                }
                else if(apertura1.equals(ora2)) {
                    options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                    flag = 1;
                }
                else if(flag == 1) {
                    if(chiusura1.equals(ora1)) {
                        options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                        flag = 0;
                    }
                    else if(chiusura1.equals(ora2)) {
                        options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                        options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                        flag = 0;
                    }
                    else {
                        options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                        options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                    }
                }
            }
        }
        else {      //orario a cavallo della mezzanotte
            int oap = Integer.parseInt(apertura1.split(":")[0]);
            int och = Integer.parseInt(chiusura1.split(":")[0]);

            for(int i=oap; i<24; i++) {
                if(i<10) {
                    ora1 = "0"+i+":00";
                    ora2 = "0"+i+":30";                            
                }
                else {
                    ora1 = i+":00";
                    ora2 = i+":30";                                                       
                }

                if(i == oap) {
                    if(apertura1.equals(ora1)) {
                        options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                    }
                    options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                }
                else {
                    options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                    options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                }
            }

            for(int i=0; i<=och; i++) {
                if(i<10) {
                    ora1 = "0"+i+":00";
                    ora2 = "0"+i+":30";                            
                }
                else {
                    ora1 = i+":00";
                    ora2 = i+":30";                                                       
                }

                options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                if(i==och) {
                    if(chiusura1.equals(ora2)) {
                        options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                    }
                }
                else {
                    options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                }
            }
        }

        if(p.getLocale().getSecondaApertura()!=null && !p.getLocale().getSecondaApertura().isEmpty()) {

            app = p.getLocale().getSecondaApertura().split("-");
            String apertura2 = app[0].trim();
            String chiusura2 = app[1].trim();

            long tap2 = Time.valueOf(apertura2+":00").getTime();
            long tch2 = Time.valueOf(chiusura2+":00").getTime();

            int oap = Integer.parseInt(apertura2.split(":")[0].trim());
            int och = Integer.parseInt(chiusura2.split(":")[0].trim());                    

            if(tap2 < tch2) {       //orario non a cavallo della mezzanotte                        

                for(int i=oap; i<=och; i++) {
                    if(i<10) {
                        ora1 = "0"+i+":00";
                        ora2 = "0"+i+":30";                            
                    }
                    else {
                        ora1 = i+":00";
                        ora2 = i+":30";                                                       
                    }

                    if(i == oap) {
                        if(apertura2.equals(ora1)) {
                            options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                        }

                        options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                    }
                    else if(i == och) {
                        options += "<option value=\""+ora1+"\">"+ora1+"</option>";

                        if(chiusura2.equals(ora2)) {
                            options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                        }
                    }
                    else {
                        options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                        options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                    }                        
                }                        
            }
            else {      //orario a cavallo della mezzanotte

                for(int i=oap; i<24; i++) {
                    if(i<10) {
                        ora1 = "0"+i+":00";
                        ora2 = "0"+i+":30";                            
                    }
                    else {
                        ora1 = i+":00";
                        ora2 = i+":30";                                                       
                    }

                    if(i == oap) {
                        if(apertura2.equals(ora1)) {
                            options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                        }

                        options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                    }
                    else {
                        options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                        options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                    }                            
                }

                for(int i=0; i<=och; i++) {
                    if(i<10) {
                        ora1 = "0"+i+":00";
                        ora2 = "0"+i+":30";                            
                    }
                    else {
                        ora1 = i+":00";
                        ora2 = i+":30";                                                       
                    }

                    if(i == och) {
                        options += "<option value=\""+ora1+"\">"+ora1+"</option>";

                        if(chiusura2.equals(ora2)) {
                            options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                        }
                    }
                    else {
                        options += "<option value=\""+ora1+"\">"+ora1+"</option>";
                        options += "<option value=\""+ora2+"\">"+ora2+"</option>";
                    }
                }                        
            }
        }
        
        return options;
    }
}
